package points

import (
	// "crypto/hmac"
	// "crypto/md5"
	// "crypto/sha256"
	// "encoding/hex"
	// "fmt"
	// "sort"
	// "strings"
)

// // MixcSignatureUtils - Struct representing the Mixc Signature Utilities
// type MixcSignatureUtils struct{}

// // SignType - Enum representing the signature types
// type SignType int

// const (
// 	// MD5 - MD5 signature type
// 	MD5 SignType = iota
// 	// HmacSHA256 - HmacSHA256 signature type
// 	HmacSHA256
// )

// // Sign - Function to generate the signature
// func (m *MixcSignatureUtils) Sign(method, path string, headers, query, body map[string]string, signHeaderPrefixList []string, secret string, signType SignType) string {
// 	data := m.buildString(method, path, headers, query, body, signHeaderPrefixList)
// 	var digest string

// 	switch signType {
// 	case MD5:
// 		digest = m.md5Digest(data + secret)
// 	case HmacSHA256:
// 		digest = m.hmacSha256Digest(data, secret)
// 	default:
// 		fmt.Println("Signature Algorithm", signType, "not available")
// 	}

// 	return digest
// }

// func (m *MixcSignatureUtils) md5Digest(data string) string {
// 	return m.md5DigestAsHex(data)
// }

// func (m *MixcSignatureUtils) md5DigestAsHex(data string) string {
// 	hash := md5.New()
// 	hash.Write([]byte(data))
// 	return hex.EncodeToString(hash.Sum(nil))
// }

// func (m *MixcSignatureUtils) hmacSha256Digest(data string, secret string) string {
// 	key := []byte(secret)
// 	hmacSha256 := hmac.New(sha256.New, key)
// 	hmacSha256.Write([]byte(data))
// 	return hex.EncodeToString(hmacSha256.Sum(nil))
// }

// func (m *MixcSignatureUtils) buildString(method, path string, headers, query, body map[string]string, signHeaderPrefixList []string) string {
// 	var strBuilder strings.Builder

// 	strBuilder.WriteString(strings.ToUpper(method))
// 	strBuilder.WriteString("\n")
// 	if headers != nil {
// 		strBuilder.WriteString(headers["Accept"])
// 		strBuilder.WriteString("\n")
// 		strBuilder.WriteString(headers["Content-Type"])
// 		strBuilder.WriteString("\n")
// 		headerStr := m.buildHeaders(headers, signHeaderPrefixList)
// 		resourceStr := m.buildResources(path, query, body)

// 		strBuilder.WriteString(headerStr)
// 		strBuilder.WriteString(resourceStr)
// 		fmt.Println("待签名信息:\n" + strBuilder.String())
// 	}

// 	return strBuilder.String()
// }

// func (m *MixcSignatureUtils) buildHeaders(headers map[string]string, signHeaderPrefixList []string) string {
// 	var strBuilder strings.Builder

// 	if headers != nil {
// 		sortedKeys := make([]string, 0, len(headers))
// 		for k := range headers {
// 			sortedKeys = append(sortedKeys, k)
// 		}
// 		sort.Strings(sortedKeys)

// 		var signHeadersStringBuilder strings.Builder

// 		for _, k := range sortedKeys {
// 			if m.isSignHeader(k, signHeaderPrefixList) {
// 				strBuilder.WriteString(k)
// 				strBuilder.WriteString(":")
// 				if v := headers[k]; v != "" {
// 					strBuilder.WriteString(v)
// 				}
// 				strBuilder.WriteString("\n")

// 				if signHeadersStringBuilder.Len() > 0 {
// 					signHeadersStringBuilder.WriteString(",")
// 				}
// 				signHeadersStringBuilder.WriteString(k)
// 			}
// 		}
// 		fmt.Println("待签名的头部字段:", signHeadersStringBuilder.String())
// 	}

// 	return strBuilder.String()
// }

// func (m *MixcSignatureUtils) buildResources(path string, query, body map[string]string) string {
// 	var strBuilder strings.Builder

// 	if path != "" {
// 		strBuilder.WriteString(path)
// 	}

// 	sortedMap := make(map[string]string)
// 	for k, v := range query {
// 		sortedMap[k] = v
// 	}

// 	for k, v := range body {
// 		sortedMap[k] = v
// 	}

// 	var sbParam strings.Builder
// 	for k, v := range sortedMap {
// 		if k != "" {
// 			if sbParam.Len() > 0 {
// 				sbParam.WriteString("&")
// 			}
// 			sbParam.WriteString(k)
// 			if v != "" {
// 				sbParam.WriteString("=" + v)
// 			}
// 		}
// 	}
// 	if sbParam.Len() > 0 {
// 		strBuilder.WriteString("?" + sbParam.String())
// 	}

// 	return strBuilder.String()
// }

// func (m *MixcSignatureUtils) isSignHeader(headerName string, signHeaderPrefixList []string) bool {
// 	if headerName == "" || strings.ToLower(headerName) == "x-ca-signature" {
// 		return false
// 	}

// 	if strings.HasPrefix(strings.ToLower(headerName), "x-ca-") {
// 		return true
// 	}

// 	if len(signHeaderPrefixList) > 0 {
// 		for _, prefix := range signHeaderPrefixList {
// 			if strings.ToLower(headerName) == prefix {
// 				return true
// 			}
// 		}
// 	}

// 	return false
// }

type WxCommonRsp struct {
	Code    int    `json:"code"`
	Success bool   `json:"success"`
	Message string `json:"message"`
}

type WxMemberInfoRsp struct {
	WxCommonRsp
	Data WxMemberInfo `json:"data"`
}
type WxMemberInfo struct {
	OpenID      string `json:"openId"`
	NickName    string `json:"nickName"`
	Avatar      string `json:"avatar"`
	MallCode    string `json:"mallCode"`
	UnionID     string `json:"unionId"`
	CardLevel   string `json:"cardLevel"`
	MemberID    string `json:"memberId"`
	ErpMemberID string `json:"erpMemberId"`
}

type WxPointsInfoRsp struct {
	WxCommonRsp
	Data WxPointsInfo `json:"data"`
}

type WxPointsInfo struct {
	AvailablePoints string `json:"availablePoints"`
	HoldPoints      string `json:"holdPoints"`
	Points          string `json:"points"`
	ExpiredPoints   string `json:"expiredPoints"`
	ExpiredDate     string `json:"expiredDate"`
}
